/// 检查指定字符串是否为空<br>
/// 当指定字符串是null或长度为0或全部由空格组成时，返回true；否则返回false
bool isNullEmptyOrBlank(String? str) {
  if (str == null) {
    return true;
  } else {
    return str.trim().isEmpty;
  }
}

/// 修剪指定字符串。从指定字符串的首尾去除指定字符串<br>
/// [str] 要修剪的字符串<br>
/// [trimStr] 要去除的字符串。不使用本参数时去除空格
String trim(String str, [String? trimStr]) {
  return trimLeft(trimRight(str, trimStr), trimStr);
}

/// 修剪指定字符串。从指定字符串的头部去除指定字符串<br>
/// [str] 要修剪的字符串<br>
/// [trimStr] 要去除的字符串。不使用本参数时去除空格
String trimLeft(String strRaw, [String? trimStr]) {
  if (isNullEmptyOrBlank(strRaw)) {
    return '';
  } else if (trimStr != null && strRaw.length < trimStr.length) {
    return strRaw;
  }

  trimStr ??= ' ';

  int startIdx = 0;
  while (strRaw.startsWith(trimStr, startIdx)) {
    startIdx += trimStr.length;
  }

  return startIdx == 0 ? strRaw : strRaw.substring(startIdx);
}

/// 修剪指定字符串。从指定字符串的尾部去除指定字符串<br>
/// [str] 要修剪的字符串<br>
/// [trimStr] 要去除的字符串。不使用本参数时去除空格
String trimRight(String strRaw, [String? trimStr]) {
  if (isNullEmptyOrBlank(strRaw)) {
    return '';
  } else if (trimStr != null && strRaw.length < trimStr.length) {
    return strRaw;
  }

  trimStr ??= ' ';

  int endIdx = strRaw.length - trimStr.length;
  while (strRaw.startsWith(trimStr, endIdx)) {
    endIdx -= trimStr.length;
  }
  endIdx += trimStr.length;

  return endIdx == strRaw.length ? strRaw : strRaw.substring(0, endIdx);
}